home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Source Code / Zoners Half-Life Tools / common / resourcelock.cpp < prev    next >
C/C++ Source or Header  |  2001-02-17  |  1KB  |  62 lines

  1. #ifdef SYSTEM_WIN32
  2. #define WIN32_LEAN_AND_MEAN
  3. #include <windows.h>
  4. #endif
  5.  
  6. #include "cmdlib.h"
  7. #include "messages.h"
  8. #include "log.h"
  9. #include "blockmem.h"
  10.  
  11. #include "resourcelock.h"
  12.  
  13. #ifdef SYSTEM_WIN32
  14.  
  15. typedef struct
  16. {
  17.     HANDLE          Mutex;
  18. }
  19. ResourceLock_t;
  20.  
  21. void*           CreateResourceLock(int LockNumber)
  22. {
  23.     char            lockname[_MAX_PATH];
  24.     char            mapname[_MAX_PATH];
  25.     ResourceLock_t* lock = (ResourceLock_t*)Alloc(sizeof(ResourceLock_t));
  26.  
  27.     ExtractFile(g_Mapname, mapname);
  28.     safe_snprintf(lockname, _MAX_PATH, "%d%s", LockNumber, mapname);
  29.  
  30.     lock->Mutex = CreateMutex(NULL, FALSE, lockname);
  31.  
  32.     if (lock->Mutex == NULL)
  33.     {
  34.         LPVOID          lpMsgBuf;
  35.  
  36.         Log("lock->Mutex is NULL! [%s]", lockname);
  37.         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
  38.                       FORMAT_MESSAGE_FROM_SYSTEM |
  39.                       FORMAT_MESSAGE_IGNORE_INSERTS,
  40.                       NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) & lpMsgBuf, 0, NULL);
  41.         Error((LPCTSTR)lpMsgBuf);
  42.     }
  43.  
  44.     WaitForSingleObject(lock->Mutex, INFINITE);
  45.  
  46.     return lock;
  47. }
  48.  
  49. void            ReleaseResourceLock(void** lock)
  50. {
  51.     ResourceLock_t* lockTmp = (ResourceLock_t*)*lock;
  52.  
  53.     if (!ReleaseMutex(lockTmp->Mutex))
  54.     {
  55.         Error("Failed to release mutex");
  56.     }
  57.     Free(lockTmp);
  58.     *lock = NULL;
  59. }
  60.  
  61. #endif
  62.